home *** CD-ROM | disk | FTP | other *** search
- /* $VER: Polling_Place.rexx 6.2 (5.8.93)
- a Voting Booth for BBBBS by Richard Lee Stockton
- */
-
- options results
-
- CALL TIME('R')
- SIGNAL ON BREAK_C
- SIGNAL ON BREAK_E
- CR='0D'x
-
- BBSIDENTIFY SYSOP
- sysop=result
- bbsname='WWBBS'
-
- bbspath=GETCLIP('BBS_path')
- polldir=bbspath'rexxDoors/Data/Polls'
- CALL MAKEDIR(polldir)
-
- PARSE ARG name . . colorflag secs .
-
- BBSIDENTIFY EMULATION
- PARSE VAR RESULT type .
- if type = "ANSI" then
- colorflag=1
- else
- colorflag=0
-
- BBSIDENTIFY USER
- PARSE VAR RESULT Username From Acces .
- name = substr(Username,2,length(Username)-2)
-
- CALL colors(colorflag)
- polls=SHOWDIR(polldir)
-
- DO FOREVER
- SAY CR
- SAY bak2||CENTER(' - Polling_Place.rexx version 6.2 5 Aug 1993 - ',75)||def||CR
- CALL ShowPolls()
- com=getinput(1 0 '['pen3'Q'def']uit_To_BBS, ['pen3'S'def']tart_New_Poll or Select_Poll_Number > ')
- com=STRIP(com)
- CALL checkBBS()
- SELECT
- WHEN com='S' THEN CALL InitPoll()
- WHEN com='X' | com='Q' THEN
- DO
- SAY CR
- SAY 'Returning to the BBS...'CR
- SAY CR
- EXIT
- END
- WHEN DATATYPE(com,'N') THEN CALL do_poll()
- WHEN com='' THEN
- IF getinput(1 1 'Return to BBS? (nY) > ')~='N' THEN EXIT
- OTHERWISE NOP
- END
- END
- EXIT
-
-
- checkBBS:
- IF ADDRESS()~='BAUD' THEN RETURN 0
- IF TIME('E')>secs THEN EXIT
- dcd
- IF RC=0 THEN EXIT
- temp=secs-TIME('E')
- IF temp<120 THEN SAY '*** Only' temp 'seconds left! ***'CR
- RETURN 0
-
-
- getinput:
- PARSE ARG upflag' 'oneflag' 'pline
- prompt( pline)
- inarg=readstr()
- inarg=STRIP(inarg)
- IF upflag THEN inarg=UPPER(inarg)
- IF oneflag THEN inarg=LEFT(inarg,1)
- inarg=cleanstring(0':'inarg)
- IF LENGTH(inarg)>64 THEN
- DO
- SAY 'Question too long! Please try again.'CR
- inarg=getinput(0 0 pline)
- END
- RETURN inarg
-
-
- cleanstring:
- PARSE ARG nflag':'cstr
- bot=TRIM(XRANGE(,' '))
- bot=COMPRESS(bot,'1B'x)
- top=XRANGE('7F'x)
- IF nflag=1 THEN
- DO
- bot=bot||XRANGE('!','@')'[\]`~{:}'
- cstr=TRANSLATE(UPPER(cstr),' ','_')
- END
- cstr=COMPRESS(cstr,bot||top)
- IF nflag~=2 THEN cstr=STRIP(cstr)
- IF nflag=1 THEN cstr=SPACE(cstr,1,'_')
- RETURN cstr
-
-
- ShowPolls:
- SAY CR
- totpolls=WORDS(polls)
- DO pfl=1 TO totpolls BY 3
- pfl2=pfl+1
- pfl3=pfl+2
- pfline=pen3||RIGHT(pfl,3)||def LEFT(WORD(polls,pfl),21)
- IF pfl2<=totpolls THEN
- pfline=pfline pen3||RIGHT(pfl2,3)||def LEFT(WORD(polls,pfl2),21)
- IF pfl3<=totpolls THEN
- pfline=pfline pen3||RIGHT(pfl3,3)||def LEFT(WORD(polls,pfl3),21)
- SAY pfline||CR
- END
- SAY LEFT('=',75,'=')||CR
- RETURN
-
-
- InitPoll:
- SAY CR
- SAY 'You are now starting a new list of questions to be answered by other'CR
- SAY 'users. You may enter as many multiple-choice questions as you like.'CR
- SAY 'You should limit the number of answers per question to 10 or less.'CR
- SAY 'Other than that, you are limited only by the bounds of good taste.'CR
- SAY 'A ''None Of The Above'' entry will be added to each list of answers.'CR
- SAY 'For a simple Yes/No or True/False question just enter one answer (Yes,'CR
- SAY 'No, True, False), and the opposite answer will be filled in for you.'CR
- SAY CR
- u.=''
- u.0=0
- p.=''
- p.0=0
- p.0.0=3
- n=LASTPOS('_',name)
- p.0.0.0='The_'SUBSTR(name,n+1)'_Poll'
- DO i=2 WHILE EXISTS(polldir'/'p.0.0.0)
- p.0.0.0=p.0.0.0'_'i
- END
- p.0.0.0=STRIP(RIGHT(p.0.0.0,20))
- p.0.1=DATE('I')
- p.0.1.0=name
- p.0.2=0
- p.0.2.0=p.0.1
- p.0.3=0
- p.0.3.0=p.0.1
- DO i=1
- DO ii=1
- CALL checkBBS()
- SAY CR
- SAY 'Enter Question Number' i ' (or blank to quit)'CR
- SAY ' 'LEFT('=',64,'=')||CR
- t=getinput(0 0 '> ')
- IF t='' THEN LEAVE i
- SAY t||CR
- IF getinput(1 1 pen3'Is that correct? (nY) > 'def)~='N' THEN LEAVE ii
- END
- p.i.0.0=t
- DO j=1
- DO jj=1
- SAY 'Enter Answer Number' j ' (or blank to quit)'CR
- t=getinput(0 0 '> ')
- IF t='' THEN LEAVE j
- SAY t||CR
- IF getinput(1 1 pen3'Is that correct? (nY) > 'def)~='N' THEN LEAVE jj
- END
- p.i.j=0
- p.i.j.0=t
- END
- IF j=1 THEN
- DO
- p.i.0=''
- p.i.0.0=''
- LEAVE i
- END
- ELSE IF j=2 THEN
- DO
- IF UPPER(p.i.1.0)='NO' THEN line='Yes'
- ELSE IF UPPER(p.i.1.0)='YES' THEN line='No'
- ELSE IF UPPER(p.i.1.0)='TRUE' THEN line='False'
- ELSE IF UPPER(p.i.1.0)='FALSE' THEN line='True'
- ELSE line='None of the above.'
- END
- ELSE IF j>2 THEN
- DO
- jj=j-1
- IF LEFT(UPPER(p.i.jj),17)='NONE OF THE ABOVE' THEN j=j-1
- line='None of the above.'
- END
- p.i.0=j
- p.i.j=0
- p.i.j.0=line
- END
- i=i-1
- IF i<1 THEN
- DO
- p.=''
- RETURN 1
- END
- p.0=i
- SAY CR
- SAY 'This group of questions is currently called' p.0.0.0||CR
- IF getinput(1 1 pen3'Is that correct? (nY) > 'def)='N' THEN
- DO
- SAY 'Please enter a Title, 20 characters or less.'CR
- SAY pen3' 'LEFT('=',20,'=')||def||CR
- t=getinput(0 0 '> ')
- t=COMPRESS(t,xrange(,d2c(31))':/;,`?*='xrange('{')||d2c(34))
- IF t='' THEN t=p.0.0.0
- t=TRANSLATE(t,'_',' ')
- p.0.0.0=t
- END
- poll=STRIP(LEFT(p.0.0.0,20))
- CALL WritePoll(poll)
- polls=SHOWDIR(polldir)
- RETURN 0
-
-
- do_poll:
- IF com<1 | com>WORDS(polls) THEN RETURN
- poll=STRIP(WORD(polls,com))
- CALL ReadPoll(poll)
- IF voted=0 THEN CALL vote()
- IF stats() THEN CALL WritePoll(poll)
- RETURN
-
-
- ReadPoll:
- PARSE ARG filename .
- CALL CLOSE(f)
- x=OPEN(f,polldir'/'filename,'R')
- IF x=0 THEN RETURN 1
- p.=''
- p.0=READLN(f)
- IF ~DATATYPE(p.0,'N') THEN RETURN 2
- i=0
- j=0
- DO loop=1
- line=READLN(f)
- IF EOF(f) THEN LEAVE loop
- IF LEFT(line,3)='@@@' THEN
- DO
- IF WORD(line,2)='VOTED' THEN LEAVE loop
- i=i+1
- j=0
- ITERATE loop
- END
- p.i.j=line
- p.i.j.0=READLN(f)
- j=j+1
- END
- voted=0
- u.=''
- DO loop=1
- line=READLN(f)
- IF EOF(f) THEN LEAVE loop
- IF name=STRIP(line) THEN voted=1
- u.loop=line
- END
- CALL CLOSE(f)
- IF voted=0 THEN
- DO
- u.0=loop
- u.loop=name
- END
- ELSE u.0=loop-1
- RETURN 0
-
-
- vote:
- SAY poll||CR
- DO i=1 TO p.0
- SAY pen3'Question:'def p.i.0.0||CR
- IF p.i.0<16 THEN
- DO j=1 TO p.i.0
- SAY pen3||RIGHT(j,7)||def p.i.j.0||CR
- END
- ELSE
- DO pfl=1 TO p.i.0 BY 3
- pfl2=pfl+1
- pfl3=pfl+2
- pfline=pen3||RIGHT(pfl,3)||def LEFT(p.i.pfl.0,21)
- IF pfl2<=p.i.0 THEN
- pfline=pfline pen3||RIGHT(pfl2,3)||def LEFT(p.i.pfl2.0,21)
- IF pfl3<=p.i.0 THEN
- pfline=pfline pen3||RIGHT(pfl3,3)||def LEFT(p.i.pfl3.0,21)
- SAY pfline||CR
- END
- j=''
- DO WHILE ~DATATYPE(j,'N')
- CALL checkBBS()
- j=getinput(1 0 'Please Select One > ')
- IF j<1 | j>p.i.0 THEN j=''
- END
- p.i.j=p.i.j+1
- END
- p.0.2=p.0.2+1
- p.0.2.0=DATE('I')
- RETURN
-
-
- stats:
- p.0.3=p.0.3+1
- p.0.3.0=DATE('I')
- SAY CR
- SAY CR
- SAY pen3'Title:'def poll||CR
- SAY CR
- temp=p.0.2
- IF temp<1 THEN temp=1
- DO i=1 TO p.0
- SAY p.i.0.0||CR
- IF p.i.0<16 THEN
- DO j=1 TO p.i.0
- SAY RIGHT(TRUNC(.05+(p.i.j*100)/temp,1),6)'% 'p.i.j.0||CR
- END
- ELSE
- DO pfl=1 TO p.i.0 BY 3
- pfl2=pfl+1
- pfl3=pfl+2
- pfline=RIGHT(TRUNC(.05+(p.i.pfl*100)/temp,1),4)'% 'LEFT(p.i.pfl.0,19)
- IF pfl2<=p.i.0 THEN
- pfline=pfline RIGHT(TRUNC(.05+(p.i.pfl2*100)/temp,1),4)'% 'LEFT(p.i.pfl2.0,19)
- IF pfl3<=p.i.0 THEN
- pfline=pfline RIGHT(TRUNC(.05+(p.i.pfl3*100)/temp,1),4)'% 'LEFT(p.i.pfl3.0,19)
- SAY pfline||CR
- END
- SAY CR
- CALL getinput(1 1 'Press Return ')
- SAY lineup' 'lineup||CR
- END
- SAY poll 'originated by' p.0.1.0 DATE(,p.0.1,'I')||CR
- SAY 'This survey has been running' 1+DATE('I')-p.0.1 'days.'CR
- SAY p.0.2 'users have responded and the statistics have been read' p.0.3 'times.'CR
- SAY CR
- IF name=p.0.1.0 | name=sysop THEN
- DO
- temp=''
- IF name=p.0.1.0 THEN temp='This one owned by you. '
- temp=temp'Do you want to delete this poll? (Ny) > '
- IF getinput(1 1 temp)='Y' THEN
- DO
- CALL bbsNewFile.rexx(name polldir'/'p.0.0.0)
- CALL DELETE(polldir'/'p.0.0.0)
- SAY p.0.0.0 'deleted.'CR
- SAY CR
- polls=SHOWDIR(polldir)
- RETURN 0
- END
- SAY CR
- END
- ELSE CALL getinput(1 1 'Press Return ')
- RETURN 1
-
-
- WritePoll:
- PARSE ARG filename .
- CALL CLOSE(f)
- x=OPEN(f,polldir'/'filename,'W')
- IF x=0 THEN RETURN 1
- DO i=0 TO p.0
- IF i=0 THEN CALL WRITELN(f,p.0)
- ELSE CALL WRITELN(f,'@@@' i)
- DO j=0 TO p.i.0
- CALL WRITELN(f,p.i.j)
- CALL WRITELN(f,STRIP(p.i.j.0))
- END
- END
- CALL WRITELN(f,'@@@ VOTED')
- IF ~DATATYPE(u.0,'N') THEN u.0=0
- DO i=1 TO u.0
- CALL WRITELN(f,u.i)
- END
- CALL CLOSE(f)
- RETURN 0
-
-
- colors:
- ARG onoff
- IF onoff THEN
- DO
- lineup='1B'x'M'
- def=''; /* default */
- pen0=''; pen1=''; pen2=''; pen3=''
- pen4=''; pen5=''; pen6=''; pen7=''
- bak0=''; bak1=''; bak2=''; bak3=''
- bak4=''; bak5=''; bak6=''; bak7=''
- END
- ELSE
- DO
- pen0=''; pen1=''; pen2=''; pen3=''; pen4=''; pen5=''; pen6=''; pen7=''
- bak0=''; bak1=''; bak2=''; bak3=''; bak4=''; bak5=''; bak6=''; bak7=''
- def=''; lineup=''
- END
- RETURN
-
- readstr: procedure
- str=''
- out=readch(STDIN)
- call WRITECH(STDOUT,out)
- do while out~=D2C(13)
- if out=D2C(8) then do
- str=SUBSTR(str,1,LENGTH(str)-1)
- call WRITECH(STDOUT,' ')
- call WRITECH(STDOUT,out)
- end
- else
- str=INSERT(str,out)
- out=readch(STDIN)
- call WRITECH(STDOUT,out)
- end
- say '0D'x
- return(UPPER(str))
-
- prompt: procedure
- parse arg str
- writech(STDOUT,str)
- return 1
-
- BREAK_C:
- BREAK_E:
- CALL CLOSE(f)
- EXIT
-
-
- /*
- Data Format (Dates in internal format)
-
- p.0 Total Questions in this survey
- p.0.0 "3"
- p.0.0.0 Overall Survey Title (also filename)
- p.0.1 Date this survey started.
- p.0.1.0 Survey Originated By
- p.0.2 Total users polled in this survey.
- p.0.2.0 Date the last user was polled in this survey.
- p.0.3 Total users reading responses to this survey.
- p.0.3.0 Date the last user read responses to this survey.
- "@@@ 1"
- p.1.0 Total possible responses to Question 1
- p.1.0.0 Question 1
- p.1.1 Response 1 Total
- p.1.1.0 Response 1 Text
- p.1.2 Response 2 Total
- p.1.2.0 Response 2 Text
- ...
- p.1.n Response n-3 Total
- p.1.n.0 Response n-3 Text
- "@@@ 2"
- p.2.0 Total possible responses to Question 2
- p.2.0.0 Question 2
- p.2.1 Response 1 Total
- p.2.1.0 Response 1 Text
- p.2.2 Response 2 Total
- p.2.2.0 Response 2 Text
- etc.
- "@@@ VOTED"
- u.1 first user polled
- ... list of users who have responded to this survey.
- u.[p.0.2] last user polled
- */
-
- /* Polling_Place.rexx */
-